Numere cu 0 si 1 (Pregatire Timisoara, 1995)

   Pentru un numar q, 1 <q <10 sa se scrie toate numerele mai mici decat
o valoare data n, (1 <= n <= 100000) care, scrise in baza q, folosesc numai
cifrele 0 si 1.
   Datele  de intrare  sunt date in fisierul int9.txt fiecare linie va
contine numerele q si n.
   Rezultatelor vor fi obtinute in fisierul out9.txt. Daca scrierea numerelor
depaseste 80 de coloane se va trece la randul urmator.
Exemplu
Fisierul int9.txt

7 5000
9 4000

Fisierul out9.txt

q=7 n=5000
0 1 7 8 49 50 56 57 343 344 350 351 392 393 399 400 2401

q=9 n=4000
0 1 9 10 81 82 90 91 729 730 738 739 810 811 819 820
------------------------------------------------
Rezolvare (Mihai Stroe)
  Testez pentru fiecare numar pana la n daca este suma de puteri
  distincte ale bazei q . Exemplu: q=3 , 31=27+3+1 dar
  35=27+3+3( aici se opreste )+1+1.

var put:array[-3..20]of real;
    i,j,k,l,m,n,q:longint;
    fi,fo:text;
    s:string;

begin
  assign(fi,'int9.txt');
  assign(fo,'out9.txt');
  reset(fi);
  rewrite(fo);
  while not eof(fi)do
    begin
      readln(fi,q,n);
      writeln(fo,'q=',q,' n=',n);
      put[0]:=1;
      for i:=1 to 17 do
          put[i]:=q*put[i-1];
      m:=0;
      for i:=0 to n-1 do
          begin
            j:=17;
            k:=i;
            while(k<put[j]){and(k>put[j-1])}do
              begin
                if k>=put[j-1] then
                   k:=k-trunc(put[j-1]);
                dec(j);
              end;
            if k=0 then begin str(i,s);m:=m+1+length(s);if m>80 then begin writeln(fo);m:=0;end;write(fo,i,' ');end;

          end;
      writeln(fo);
    end;
  close(fi);
  close(fo);
end.
